home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ccdl150l.zip / IO / FCLOSE.C < prev    next >
C/C++ Source or Header  |  1997-03-27  |  1KB  |  65 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <libp.h>
  5.  
  6. extern int _abterm;
  7.  
  8. FILE *_pstreams[_NFILE_];
  9. char *_filenames[_NFILE_];
  10. int maxfiles;
  11.  
  12. #pragma startup fileinit 120
  13. #pragma rundown closeall 10
  14.  
  15. void fileinit(void)
  16. {
  17.     _ll_init();
  18. }
  19.  
  20. void closeall(void)
  21. {
  22.     int i;
  23.     if (!_abterm)
  24.         for (i=maxfiles-1; i >=0; i--) {
  25.             fclose(_pstreams[i]);
  26.         }
  27. }
  28. int _basefclose(FILE *stream,int release)
  29. {
  30.     int rv,i;
  31.     if (stream->token == FILTOK && maxfiles) {
  32.         int tempflag = stream->istemp;
  33.         char *fname;
  34.         fflush(stream);
  35.         stream->token = (short)-1;
  36.         if (maxfiles > 1) {
  37.             for (i=0; i < maxfiles; i++)
  38.                 if (_pstreams[i] == stream) {
  39.                     fname = _filenames[i];
  40.                     _pstreams[i] = _pstreams[maxfiles-1];
  41.                     _filenames[i] = _filenames[maxfiles-1];
  42.                 }
  43.             maxfiles--;
  44.         }
  45.         rv = _ll_close(stream->fd);
  46.         if (tempflag && fname)
  47.             rv &= remove(fname);
  48.         if (fname)
  49.             free(fname);
  50.         if (stream->flags & _F_BUF)
  51.             free(stream->buffer);
  52.         if (release)
  53.             free(stream);
  54.         if (!rv)
  55.             return 0;
  56.         else {
  57.             return EOF;
  58.         }
  59.     }
  60.     else return EOF;
  61. }
  62. int fclose(FILE *stream)
  63. {
  64.     return _basefclose(stream,1);
  65. }